Computer start-up procedure
📄 返回目录页
计算机的加电与复位
处理器有一个是RESET的引脚,用于接收复位信号。每当处理器加电,或者RESET引脚的电平由低变高时,处理器都会执行硬件初始化,以及一个可选的内部自测试(Build-in Self-Test, BIST),然后将内部所有寄存器的内容初始化到预置的状态。
当你按下主机箱面板上的RESET按钮时,就会导致RESET引脚电平的变化,从而使
计算机热启动。
对于INTEL 8086来说,复位将使代码段寄存器(CS)Segment-register的内容为0xFFFF,其他所有寄存器的内容都为0x0000,包括指令指针寄存器(IP)Instruction-register。8086之后的处理器并未延续这种设计。
在内存中,每个比特的存储都是一个微小的晶体管和一个电容完成的。因为这些东西的泄漏电荷的速度非常快,所以内存要定期补充电荷,这就叫刷新,这种存储器也称为动态随机访问存储器(Dynamic Random Access Memory,DRAM)。随机访问的意思是,访问任何一个内存单元的速度和它的位置(地址)无关。这也就是说内存读取每一个内存单元的时间是一样的。
在内存刷新期间,处理器将无法访问它。在它断电之后,所有保存的内容都会统统消失。所以,每当处理器加电之后,它无法从内存中取得任何指令。
基本输入输出系统
8086有20根地址线,但不是全是访问内存的,其余部分给了只读存储器(Read Only Memory, ROM)和外围的板卡。
ROM
1,ROM不需要刷新,其内容是预先写入的,断电也不会消失,但也很难改变。
2,在以INTEL 8086为处理器的系统中,ROM占据着整个内存空间顶端的64KB,物理地址范围是0xF0000~0xFFFFF,里面固化了开机时要执行的指令;DRAM占据着较低端的640KB,地址范围是0x00000~0x9FFFF
3,因为8086加电或者复位时,CS=0xFFFF,IP=0x0000,所以,它取的第一条指令位于
物理地址0xFFFF0,正好位于ROM中。
所以可以将程序指令固化在ROM中,处理器每次加电都自动执行。
这个指令长度为16字节。溢出这个值会回到前面从低地址开始,也就是内存的最低端。
所以,ROM中位于物理地址0xFFFF0的地方,通常是一个跳转指令,它通过改变CS和IP的内容,使处理器从ROM中的较低地址处开始取指令执行。在NASM汇编语言里,一个典型的跳转指令像这样:
jmp 0xf000:0xe056
jmp 段地址:偏移地址
这块ROM芯片中的内容包括很多部分,主要是进行硬件的诊断、检测和初始化。所谓初始化,就是让硬件处于一个正常的、默认的工作状态。
这块ROM芯片只针对那些最基本的、对于使用计算机而言最重要的设备,而它所提供的
软件例程,也只包含最基本、最常规的功能。正因为如此,这块芯片又叫基本输入输出系统(Base Input & Output System, BIOS)ROM,简称ROM-BIOS。
硬盘及其工作原理
辅助存储设备,比如软盘、光盘、硬盘、U盘等,被称为‘外存’,也就是外存储器
软盘 (Floppy Disk)的尺寸比烟盒稍大一点,但是比较薄,采用塑料作为基片,上面是一层磁性物质,可以用来记录二进制位。这种塑料介质比较柔软,所以称为软盘。
硬盘(Hard Disk, HDD),硬盘是多盘片、密封、高转速的,采用铝合金作为基片,并在表面涂上磁性物质来记录二进制位。这就使得它的盘片具有较高的硬度,故称为硬盘。
硬盘的内部构造:

一个硬盘可以有一个或多个盘片。盘片都串在一个轴上,由电动机带动着一起旋转。
每个盘片都有两个磁头(Head),上面一个,下面一个,经常用磁头来指代盘面。磁头都有编号,第1个盘片,上面的磁头编号为0,下面的磁头编号为1;第2个盘片,上面的磁头编号为2,下面的磁头编号为3,依次类推。
磁头由磁头支架固定在一个角度,一起移动。盘片旋转的时候,磁头会绕着圆心‘画‘一个看不见的圆圈,这就是磁道(Track)。因为所有磁头都是联动的,故每个盘面上的同一条磁道又可以形成一个虚拟的圆柱,称为柱面(Cylinder)。磁道编号从盘面最边缘的那条磁道开始,向着圆心的方向,从0开始编号。
磁道又可以被分为多个扇区(Sector)。扇区的编号是从1开始的。
扇区与扇区之间以间隙(空白)间隔开来,每个扇区以扇区头开始,然后是512字节的数据区。扇区头包含了每个扇区自己的信息,主要有本扇区的磁道号、磁头号和扇区号,用来定位。
一切从主引导扇区开始
ROM-BIOS在完成自己的使命之前,最后要做的一件事是从外存储设备读取更多的指令来交给处理器执行。
硬盘的第一个扇区是0面0道1扇区,或者说是0头0柱1扇区,这个扇区称为主引导扇区。如果计算机的设置是从硬盘启动的,那么,ROM-BIOS将读取硬盘主引导扇区的内容,将它加载到内存地址0x0000:0x7c00(也就是物理地址0x07C00),然后用一个jmp指令跳到那里接着执行:
jmp 0x0000:0x7c00
通常,主引导扇区的功能是继续从硬盘的其他部分读取更多的内容加以执行。
虚拟硬盘
虚拟硬盘实际上是一个文件。固定尺寸的VHD虚拟硬盘是一个具有“.vhd”扩展名的文件,它仅包括两个部分,前面是数据区,用来模拟实际的硬盘空间,后面跟着一个512字节的结尾
扇区是读写盘的最小单位,所以,读写硬盘都至少指定1个扇区。
在VHD规范里,每个扇区是512字节。VHD文件一开始的512字节就对应 着物理硬盘的0面0头1扇区。
通过Hexview观察虚拟硬盘文件尾信息是以一个字符串“conectix”开始的。这个标志用来告诉试图打开它的虚拟机,这的确是一个合法的VHD文件。该标志称为VHD创建者标识,就是说,该公司(conectix)创建了VHD文件格式的最初标准。

从这个标志开始,后面的数据包含了诸如文件的创建日期、VHD的版本、创建该文件的应用程序名称和版本、创建该文件的应用程序所属的操作系统、该虚拟硬盘的参数(磁头数、每面磁道数、每磁道扇区数)、VHD类型(固定尺寸还是动态增长)、虚拟硬盘容量等。
通常,一个扇区的尺寸是512字节,可以看成一个数据块。所以,从这个意义上来说,硬盘是一个典型的块(Block)设备。
前面“0面0头1扇区”的说法,是访问硬盘的一种方式,被称作CHS模式
还有一种方式叫LBA(Logical Block Address)逻辑块地址,将硬盘分为许多个块,每个块是一个扇区。
逻辑0扇区对应着0面0头1扇区;
逻辑1扇区对应着0面0头2扇区;
CHS与LBA的计算:
LBA = (C ×磁头总数×每道扇区数+ H ×每道扇区数+ (S-1) )